package cn.xuguowen.user.designPatten.builder;

import com.sun.org.apache.xpath.internal.operations.Bool;

/**
 * ClassName: SkuBuilder
 * Package: cn.xuguowen.user.designPatten.builder
 * Description:
 *
 * @Author 徐国文
 * @Create 2023/6/2 10:20
 * @Version 1.0
 */
public class SkuBuilder<T extends SkuVO> {
    /**
     * 提供源数据
     */
    private SkuDO skuDO;
    /**
     * 是否有优惠券
     */
    private Boolean needCoupon;

    private SkuVOFunction<T> skuVOFunction;

    private SkuVOExtFunction<T> skuVOExtFunction;

    public static <T extends SkuVO> SkuBuilder create() {
        return new SkuBuilder();
    }

    public SkuBuilder<T> skuDo(SkuDO skuDO) {
        this.skuDO = skuDO;
        return this;
    }

    public SkuBuilder<T> skuDo(Boolean needCoupon) {
        this.needCoupon = needCoupon;
        return this;
    }

    public SkuBuilder<T> skuDo(SkuVOFunction<T> skuVOFunction) {
        this.skuVOFunction = skuVOFunction;
        return this;
    }

    public SkuBuilder<T> skuDo(SkuVOExtFunction<T> skuVOExtFunction) {
        this.skuVOExtFunction = skuVOExtFunction;
        return this;
    }


    public T build() {
        T skuVO = this.skuVOFunction.newInstance();
        skuVO.setSkuId(skuDO.getSkuId());
        skuVO.setSkuName(skuDO.getSkuName());
        if (needCoupon) {
            // 需要优惠券，进行转换
            skuVO.setCouponText("需要优惠券！");
        }

        // 构建其他的额外信息
        if (this.skuVOExtFunction != null) {
            this.skuVOExtFunction.buildExtInfo(skuVO,skuDO);
        }

        return skuVO;
    }

}
